//
//  LoginViewModel.m
//  RAC的简单应用
//
//  Created by wsj on 16/8/14.
//  Copyright © 2016年 wsj. All rights reserved.
//

#import "LoginViewModel.h"
#import "Account.h"
#import "MBProgressHUD+MJ.h"
@implementation LoginViewModel
-(Account *)account
{
    if (_account == nil) {
        _account = [[Account alloc]init];
    }
    return _account;
}
- (instancetype)init
{
    if (self = [super init]) {
        [self initialBind];
    }
    return self;
}
// 初始化绑定
- (void)initialBind
{
    // 讲两个型号转化为一个信号
//    RACObserve(self.account, account)  监听 self.account的account的属性发生改变就会发送信号
    _enableLoginSignal = [RACSignal combineLatest:@[RACObserve(self.account, account),RACObserve(self.account, password)] reduce:^id(NSString *account,NSString *password){
        return @(account.length && password.length);
    }];
    // 创建 RACCommand处理事件的类
    self.command = [[RACCommand alloc]initWithSignalBlock:^RACSignal *(id input) {
        // 创建一个信号，并返回这个信号
       RACSignal *siginal = [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
           // 模拟网络请求 等待1.0再去发送信号
           dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
               // 发送信号
               [subscriber sendNext:@"登录成功"];
               // 发送完成
               [subscriber sendCompleted];
           });
           return nil;
       }];
        return  siginal;
    }];
    // 订阅信号
//    [self.command.executionSignals subscribeNext:^(id x) {
//        // 遍历出来self.command里面发出的信号
//        // 再去订阅里面的信号
//       [x subscribeNext:^(id x) {
//           if ([x isEqualToString:@"登录成功"]) {
//               NSLog(@"登录成功");
//           }
//       }];
//    }];
    // 高级写法
    // 订阅信号
    [self.command.executionSignals.switchToLatest subscribeNext:^(id x) {
        if ([x isEqualToString:@"登录成功"]) {
            NSLog(@"登录成功");
        }
    }];
    // 监听信号的状态
    [[self.command.executing skip:1] subscribeNext:^(id x) {
        if ([x isEqualToNumber:@(YES)]) {
            [MBProgressHUD showMessage:@"正在登录。。。"];
        }else{
            [MBProgressHUD hideHUD];
        }
    }];
}
@end
